
typedef struct pwmStruct * PWM_t;
PWM_t pwm_Create(int Capacity); 

typedef struct PID_data * PID_t;

typedef struct {
    PID_t pidData;
    int * speedDataAddress;
    PID_t (*init)(void);
    void (*manualMode_runMotorButtonOn) (void);
    float (*butterworth_filter_update)(unsigned int);
    void (*timeOut_logic)(void*);
    bool (*pushMode_detectBrakeAfterPush)(void);
} PID_interface;
PID_t pid_init(void);

extern void update_pwm(void);
extern void set_pwm(unsigned pwm_duty);
extern void set_pwm_button(unsigned pwm_duty);
extern void pwm_init(void);
extern void  pwm_config(void);
extern unsigned int get_pwm(void);
extern void set_pwm_FORCED(unsigned int _pwm_duty);

